package model

import (
	"fmt"
	"os"
	"runtime"
)

// CheckLinuxEnvironment 检测当前操作系统是否为 Linux，如果不是则终止程序。
// 该函数无需参数，直接调用即可。
func CheckLinuxEnvironment() {
	// 获取当前操作系统类型
	if runtime.GOOS != "linux" {
		// 如果不是 Linux，输出错误信息并终止程序
		GetLanguageManager().Error("错误：此程序只能在Linux系统上运行", "Error: This program can only run on Linux.")
		os.Exit(1)
	}
}

// CheckRootPermission 检查当前用户权限是否属于root，如果不是则终止程序。
func CheckRootPermission() {
	// 获取当前UID
	uid := os.Getuid()
	if uid != 0 {
		// 如果不是root，输出错误信息并终止程序
		GetLanguageManager().Error("错误：此程序必须以root权限运行", "Error: This program must be run as root.")
		os.Exit(1)
	}

}

// CheckSystemd 检查当前系统是否支持 systemd，如果不支持则终止程序。
func CheckSystemd() {
	systemdPath := "/run/systemd/system"
	if _, err := os.Stat(systemdPath); os.IsNotExist(err) {
		GetLanguageManager().Error("当前系统不支持systemd，请使用其他方法启动服务", "The current system does not support systemd. Please use another method to start the service")
		os.Exit(1)
	} else if err != nil {
		GetLanguageManager().Error("检查systemd路径失败: ", "Failed to check the path of systemd: ", err)
		os.Exit(1)
	}
}

// CheckSourcePath 函数用于检查提供的源路径是否存在且为一个目录。
// 参数:
//
//	SourcePath: 需要检查的源路径字符串。
//
// 返回值:
//
//	error: 如果路径不存在或不是一个目录，则返回相应的错误信息；否则返回nil。
func CheckSourcePath(SourcePath string) error {
	// 使用os.Stat检查路径是否存在
	fileInfo, err := os.Stat(SourcePath)

	// 如果路径不存在，则记录错误日志并返回错误
	if os.IsNotExist(err) {
		GetLanguageManager().Warn("源路径不存在: ", "Source path does not exist: ", SourcePath)
		return fmt.Errorf(GetLanguageManager().GetText())
	}

	// 如果检查路径时发生其他错误，记录日志并返回错误
	if err != nil {
		GetLanguageManager().Warn("检查路径时出错: ", "Error checking path: ", err)
		return fmt.Errorf(GetLanguageManager().GetText())
	}

	// 检查路径是否为目录
	if !fileInfo.IsDir() {
		GetLanguageManager().Warn("源路径不是一个目录: ", "Source path is not a directory: ", SourcePath)
		return fmt.Errorf(GetLanguageManager().GetText())
	}

	// 如果路径存在且为目录，则函数正常结束，返回nil
	return nil
}
